CIG 简介
在 Docker 的监控生态中,CIG 是一套堪称经典、久经沙场的轻量级容器监控 “三驾马车” 组合。它由三个著名的开源工具并网组合而成:
- C — cAdvisor(Google 出品:负责收集容器底层的各项硬核指标)
- I — InfluxDB(时序数据库:负责高速存储这些带有时间戳的指标数据)
- G — Grafana(炫酷大屏:负责将数据展现为精美的图形化仪表盘)
虽然现在企业级大集群流行 Prometheus + Grafana 的组合,但对于管理单机或中小型 CentOS 环境,CIG 架构因其部署极快、对内存消耗极小(轻量级)的特点,依然是单机全方位监控的绝对王者。
CIG 核心工作原理
在了解安装前,我们先用一张数据流向图看懂它们是怎么打配合的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [ 各个业务容器 ] (产生 CPU/内存/网络数据) │ ▼ ┌──────────────┐ │ cAdvisor │ ──(实时抓取并分析容器状态) └──────────────┘ │ ▼ ┌──────────────┐ │ InfluxDB │ ──(将结构化指标写入时序数据库) └──────────────┘ │ ▼ ┌──────────────┐ │ Grafana │ ──(读取数据库,渲染炫酷监控大屏) └──────────────┘
|
- cAdvisor 会直接挂载宿主机的 /var/run/docker.sock 和 /sys/fs/cgroup,实时偷窥所有容器的 CPU、内存、网络 I/O、磁盘 I/O。
- 它把这些高频数据每隔几秒就一股脑写入 InfluxDB 1.x。
- Grafana 负责当 “打工人” 的眼睛,配置好 InfluxDB 数据源后,用折线图、柱状图把微服务是否有内存泄漏、CPU 突高直观地展示出来。
CIG 一键式安装部署
既然是 “三驾马车”,单个去 docker run 会让人精神崩溃。我们直接编写一个 docker-compose.yml,实现一键轰鸣并网。
准备宿主机目录
1 2 3
| mkdir -p /opt/apps/cig/influxdb mkdir -p /opt/apps/cig/grafana chmod 777 /opt/apps/cig/grafana
|
准备 cadvisor 镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| $ wget https://github.com/google/cadvisor/releases/download/v0.49.1/cadvisor-v0.49.1-linux-amd64
$ mv cadvisor-v0.49.1-linux-amd64 cadvisor $ chmod +x cadvisor
$ vim Dockerfile
FROM alpine:3.19
LABEL maintainer="owlias"
RUN apk --no-cache add ca-certificates libc6-compat device-mapper findutils tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone
COPY cadvisor /usr/bin/cadvisor
EXPOSE 8080
ENTRYPOINT ["/usr/bin/cadvisor", "-logtostderr"]
$ docker build -t my-cadvisor:v0.49.1 .
$ docker images | grep my-cadvisor
|
编写 docker-compose.yml
请在 /opt/apps/cig/ 目录下创建 docker-compose.yml,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| networks: monitor-net: name: monitor-net driver: bridge
services: my_influxdb: image: influxdb:1.8.10 container_name: cig_influxdb restart: always networks: - monitor-net ports: - "8086:8086" volumes: - /opt/apps/cig/influxdb:/var/lib/influxdb environment: - INFLUXDB_DB=cadvisor - INFLUXDB_ADMIN_USER=admin - INFLUXDB_ADMIN_PASSWORD=adminpassword
my_cadvisor: image: my-cadvisor:v0.49.1 container_name: cig_cadvisor restart: always privileged: true networks: - monitor-net ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro command: -storage_driver=influxdb -storage_driver_host=my_influxdb:8086 -storage_driver_db=cadvisor
my_grafana: image: grafana/grafana:latest container_name: cig_grafana restart: always networks: - monitor-net ports: - "3000:3000" volumes: - /opt/apps/cig/grafana:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin depends_on: - my_influxdb
|
一键合闸启动
1 2
| cd /opt/apps/cig/ docker compose up -d
|
检查状态:输入 docker compose ps,当看到三个容器全部为 Up 时,说明你的单机专业监控网已经全面铺开!
1 2 3
| $ curl http://192.168.1.8:8080 $ curl http://192.168.1.8:8086/query?q=show databases $ curl http://192.168.1.8:3000
|
CIG 监控大屏配置与使用
服务起来后,数据已经在默默流动了。我们需要去 Grafana 配置大屏把它展现出来。
第一步:登录 Grafana。打开 Mac 浏览器,访问:http://your-centos-ip:3000。默认账号:admin/admin。
第二步:并网 InfluxDB 数据源 (Data Source)。
- 点击左侧边栏的齿轮 (Configuration) -> Data Sources。
- 点击 Add data source,选择 InfluxDB。
- 关键配置项:
- URL: 输入 http://my_influxdb:8086 (利用 Docker 内部网络别名直接直连)。
- Database: 输入 cadvisor(对应 Compose 里创建的数据库名)。
- User / Password: 输入 admin / adminpassword。
- 点击最下方的 Save & test。如果出现绿色提示 Data source is working,说明数据通道完全打通!
第三步:白嫖官方绝美大屏模板(不用自己辛辛苦苦画图)。Grafana 社区有全球开发者分享的现成模板,我们直接输入代码导入即可。
- 点击左侧加号 + (Create) -> Import。
- 在 Import via grafana.com 文本框中,输入经典的 cAdvisor 监控大屏 ID:193(或者 11277,这是一张非常炫酷的中文容器监控大屏模板)。
- 点击 Load。
- 在接下来的配置页中,最下方的 InfluxDB 下拉框里,选择你刚刚在第二步创建的那个数据源。
- 点击 Import!
瞬间,一幅科技感爆棚的 Docker 监控大盘就展现在你面前,瞬间一幅科技感爆棚的 Docker 监控大盘就展现在你面前:
- 在左上角的下拉菜单里,任意切换查看你宿主机上的不同容器(比如切换到 my_mysql_3300 或者 app_user_8081)。
- 实时观察该容器的 CPU 利用率曲线、实时内存逼近值、网络每秒吞吐量(KB/s)。
- 当你的 Java 微服务突然因为高并发卡死或者发生内存泄漏(OOM)时,大屏上的折线图会直接冲顶,帮你瞬间锁定真凶。
标题:
Docker 基础(六)- 监控和管理工具 - CIG